package com.fotile.weixin.work.request.contactParam;

import com.fotile.weixin.work.param.ExternalProfile;
import com.fotile.weixin.work.param.UserAttrList;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;

/**
 * 成员请求参数实体类
 * 注意，每个部门下的部门、成员总数**不能超过3万个**。建议保证创建department对应的部门和创建成员是串行化处理。
 *
 * @author 江虹
 * @version 1.0, 18/09/03
 */

@Data
public class User {
    @Length(min = 1, max = 64, message = "长度为1~64个字节")
    @NotEmpty(message = "成员id不能为空")
    @ApiModelProperty(value = "成员UserID。对应管理端的帐号，企业内必须唯一。不区分大小写，长度为1~64个字节")
    private String userid;


    @NotEmpty(message = "成员名称不能为空")
    @Length(min = 1, max = 64, message = "长度为1~64个字节")
    @ApiModelProperty(value = "成员名称。长度为1~64个字符")
    private String name;

    @Pattern(regexp = "^[A-Za-z0-9_\\-\\\\s+.]+$", message = "由字母、数字、点(.)、减号(-)、空格或下划线(_)组成")
    @Length(min = 1, max = 64, message = "长度为1~64个字节")
    @ApiModelProperty(value = " 英文名。长度为1-64个字节，由字母、数字、点(.)、减号(-)、空格或下划线(_)组成")
    private String english_name;


    @ApiModelProperty(value = " 手机号码。企业内必须唯一，mobile/email二者不能同时为空")
    private String mobile;


    @NotEmpty(message = "成员所属部门id列表不为空")
    @ApiModelProperty(value = " 成员所属部门id列表,不超过20个")
    private Integer[] department;


    @ApiModelProperty(value = "部门内的排序值，默认为0，成员次序以创建时间从小到大排列。数量必须和department一致，数值越大排序越前面。有效的值范围是[0, 2^32)")
    private Integer[] order;


    @Length(max = 128, message = "长度为0~128个字符")
    @ApiModelProperty(value = "职位信息。长度为0~128个字符")
    private String position;


    @ApiModelProperty(value = "性别。1表示男性，2表示女性")
    private String gender;


    @Length(max = 64, message = "长度不超过64个字节")
    @Pattern(regexp = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*")
    @ApiModelProperty(value = " 邮箱。长度不超过64个字节，且为有效的email格式。企业内必须唯一，mobile/email二者不能同时为空")
    private String email;


    @Pattern(regexp = "^[0-9\\-]{1,16}$")
    @ApiModelProperty(value = " 座机。由1-32位的纯数字或’-‘号组成。")
    private String telephone;


    @ApiModelProperty(value = "上级字段，标识是否为上级。在审批等应用里可以用来标识上级审批人")
    private Integer isleader;


    @ApiModelProperty(value = "成员头像的mediaid，通过素材管理接口上传图片获得的mediaid")
    private String avatar_mediaid;


    @ApiModelProperty(value = "启用/禁用成员。1表示启用成员，0表示禁用成员")
    private Integer enable;


    @ApiModelProperty(value = "自定义字段。自定义字段需要先在WEB管理端添加，见扩展属性添加方法，否则忽略未知属性的赋值。自定义字段长度为0~32个字符，超过将被截断")
    private UserAttrList extattr;

    @ApiModelProperty(value = "是否邀请该成员使用企业微信（将通过微信服务通知或短信或邮件下发邀请，每天自动下发一次，最多持续3个工作日），默认值为true。")
    private boolean to_invite = true;


    @ApiModelProperty(value = "成员对外属性")
    private ExternalProfile external_profile;

}



